package kr.co.bettersoft.waitnumberstorem.activity;

import kr.co.bettersoft.waitnumberstorem.common.CommonUtils;

import org.apache.http.util.EncodingUtils;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import android.view.Window;
import android.webkit.JsResult;
import android.webkit.WebChromeClient;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.LinearLayout;
import android.widget.Toast;

public class PaymentResult extends Activity{

	String TAG = "PaymentResult";


	//ISP앱으로 부터 Call Back을 받기 위한 App스키마
	private final String APP_SCHEMA_URI = "poqapp://";	

	//ISP앱에서 취소를 선택했을 때 받는 URI
	private final String APP_SCHEMA_CANCEL_URI = APP_SCHEMA_URI + "ISPCancel/";

	//ISP앱에서 인증을 성공했을 때 받는 URI	
	private final String APP_SCHEMA_SUCCESS_URI = APP_SCHEMA_URI + "ISPSuccess/";


	// 동적 웹뷰
	LinearLayout contents;
	WebView wv;

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		requestWindowFeature( Window.FEATURE_NO_TITLE );
		setContentView(R.layout.payment_result);
		contents = (LinearLayout) findViewById(R.id.webview_linear_layout);
		wv = new WebView(this);
		wv.addJavascriptInterface(new AndroidBridge(), "hybrid");
		wv.getSettings().setJavaScriptEnabled(true);		 // JavaScript 허용.
		wv.setWebViewClient(new MyWebViewClient());  // WebViewClient 지정       
		wv.setWebChromeClient(new MyWebChromeClient());
		wv.getSettings().setPluginsEnabled(true);		// 플러그인 가능
		wv.getSettings().setJavaScriptEnabled(true);
		wv.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
		wv.getSettings().setSupportMultipleWindows(false);
		wv.getSettings().setLoadWithOverviewMode(true);
		wv.getSettings().setUseWideViewPort(true);
		contents.addView(wv);

		Uri uri = getIntent().getData();
		if(uri != null){
			getResultPage(uri);
		}
	}

	/**
	 * ISP로부터 받은 URI에 따라 결제 최종 확인 페이지 혹은 결제 요청 전 페이지를 보여준다.
	 * @param resultUri		ISP로 부터 받은 URI
	 */
	private void getResultPage(Uri resultUri) {
		String schemaUrl = resultUri.toString();
		String urlString = null;

		if(schemaUrl.startsWith(APP_SCHEMA_SUCCESS_URI)){ //ISP 인증을 성공한 경우	
			if(MyWebViewActivity.mContext != null){
				((Activity) MyWebViewActivity.mContext).finish();
			}	
			urlString = schemaUrl.substring(APP_SCHEMA_SUCCESS_URI.length());
			wv.loadUrl(urlString);

		}else if(schemaUrl.startsWith(APP_SCHEMA_CANCEL_URI)){ //ISP앱에서 취소를 선택한 경우
			if(MyWebViewActivity.mContext != null){
				((Activity) MyWebViewActivity.mContext).finish();
			}	
			urlString = schemaUrl.substring(APP_SCHEMA_CANCEL_URI.length());
			wv.loadUrl(urlString);
		}
	}



	/**
	 * Bridge Class
	 * 
	 */
	private class AndroidBridge {
		// 종료
		public void finishActivity(){
			Log.d(TAG,"finishActivity called");
			//			handler.post(new Runnable() {
			//				public void run() {
			finish();
			//				}
			//			});
		}
		public void finishActivityForPayment(){		// 결재 결과 화면에서의 종료시
			Log.d(TAG,"finishActivityForPayment called");	
			// 결재 액티비티도 종료해준다
			// ...  DummyActivity dummyActivity = (DummyActivity)DummyActivity.dummyActivity;			// 종료시 더미도 함께 종료 시키기 위함
			PaymentForm paymentForm = (PaymentForm)PaymentForm.paymentForm;
			paymentForm.finish();
			finish();
		}
		
		
	}

	/**
	 * MyWebViewClient
	 * 페이지 로드, 완료 이벤트발생 가능한 웹뷰 클라이언트
	 *
	 */
	private class MyWebViewClient extends WebViewClient {
		public boolean shouldOverrideUrlLoading(WebView view, String url) {
			view.loadUrl(url);
			return true;
		}
	}
	/**
	 * WebChromeClient 를 상속하는 클래스이다.
	 * alert 이나 윈도우 닫기 등의 web 브라우저 이벤트를 구하기 위한 클래스이다.
	 * @author johnkim
	 */
	private class MyWebChromeClient extends WebChromeClient {
		//Javascript alert 호출 시 실행
		@Override
		public boolean onJsAlert(WebView view, String url, String message, JsResult result) {
			final JsResult finalRes = result;
			//AlertDialog 생성
			new AlertDialog.Builder(view.getContext())
			.setMessage(message)
			.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
				public void onClick(DialogInterface dialog, int which) {
					finalRes.confirm(); 
				}
			})
			.setCancelable(false)
			.create()
			.show();
			return true;
		}
	}
}
